/**
 * 任务通知系统（简化版）
 * 使用localStorage记录任务，页面加载时检查并显示结果
 */

import { ElMessage } from 'element-plus'
import { logger } from './logger'

class TaskNotifier {
  constructor() {
    this.STORAGE_KEY = 'starrocks_task_result'
  }

  /**
   * 请求浏览器通知权限
   */
  requestPermission() {
    if ('Notification' in window && Notification.permission === 'default') {
      Notification.requestPermission()
    }
  }

  /**
   * 任务开始前保存信息
   */
  saveTaskStart(taskInfo) {
    const task = {
      name: taskInfo.name,
      startTime: Date.now(),
      status: 'running'
    }
    localStorage.setItem(this.STORAGE_KEY, JSON.stringify(task))
    logger.info(`📝 任务开始记录: ${taskInfo.name}`)
  }

  /**
   * 任务完成后保存结果
   */
  saveTaskResult(taskName, result, isSuccess = true) {
    const task = {
      name: taskName,
      status: isSuccess ? 'completed' : 'failed',
      result: result,
      completedTime: Date.now(),
      needsNotification: true  // 标记需要通知
    }
    localStorage.setItem(this.STORAGE_KEY, JSON.stringify(task))
    logger.info(`✅ 任务结果已保存: ${taskName}`)
  }

  /**
   * 检查并显示待通知的任务结果
   */
  checkAndNotify() {
    const taskStr = localStorage.getItem(this.STORAGE_KEY)
    if (!taskStr) return
    
    try {
      const task = JSON.parse(taskStr)
      
      // 如果需要通知
      if (task.needsNotification && task.status !== 'running') {
        const elapsed = task.completedTime ? (task.completedTime - Date.now()) / -1000 : 0
        
        if (task.status === 'completed') {
          this.showSuccessNotification(task.name, task.result)
        } else if (task.status === 'failed') {
          this.showErrorNotification(task.name, task.result)
        }
        
        // 清除任务记录
        localStorage.removeItem(this.STORAGE_KEY)
      }
    } catch (e) {
      logger.error('检查任务通知失败:', e)
      localStorage.removeItem(this.STORAGE_KEY)
    }
  }

  /**
   * 显示成功通知
   */
  showSuccessNotification(taskName, result) {
    const message = this.formatResult(result)
    
    // 桌面通知（可选）
    if ('Notification' in window && Notification.permission === 'granted') {
      new Notification('✅ 任务完成', {
        body: `${taskName}: ${message}`,
        icon: '/favicon.svg'
      })
    }
    
    // 页面通知（统一使用ElMessage样式）
    ElMessage({
      message: `✅ ${taskName}完成：${message}`,
      type: 'success',
      duration: 8000,
      showClose: true
    })
  }

  /**
   * 显示失败通知
   */
  showErrorNotification(taskName, error) {
    ElMessage({
      message: `❌ ${taskName}失败：${error}`,
      type: 'error',
      duration: 8000,
      showClose: true
    })
  }

  /**
   * 格式化结果消息
   */
  formatResult(result) {
    if (!result) return '任务已完成'
    
    if (result.new_tables !== undefined) {
      return `新增${result.new_tables}表，统计${result.statistics_tables || result.processed_tables || 0}表，耗时${result.elapsed_seconds}秒`
    }
    
    if (result.processed_tables !== undefined) {
      return `处理${result.processed_tables}表，成功${result.success_tables}个，失败${result.failed_tables}个，耗时${result.elapsed_seconds}秒`
    }
    
    return JSON.stringify(result)
  }

  /**
   * 清除任务记录
   */
  clear() {
    localStorage.removeItem(this.STORAGE_KEY)
  }
}

export const taskNotifier = new TaskNotifier()
export default taskNotifier
